Skip to content

feat(short-io): add Short.io integration#3367

Open
abram0v1ch wants to merge 15 commits intosimstudioai:stagingfrom
abram0v1ch:feat/short-io
Open

feat(short-io): add Short.io integration#3367
abram0v1ch wants to merge 15 commits intosimstudioai:stagingfrom
abram0v1ch:feat/short-io

Conversation

@abram0v1ch
Copy link

@abram0v1ch abram0v1ch commented Feb 27, 2026

Summary

  • Add 6 Short.io tools (create link, list domains, list links, delete link, get QR code, get analytics) with shared types and barrel export
  • Add Short.io block config with all 6 operations, ShortIoIcon, and registry entries
  • Add documentation page covering all tools with input/output parameter tables

Test plan

  • Verify block appears in the tools category with correct icon and color
  • Test each operation with a valid Short.io API key
  • Confirm API key authentication works via the Secret API Key field
  • Verify conditional sub-block visibility (e.g. domain field only shows for create_link)
  • Check docs page renders correctly at /tools/short_io

waleedlatif1 and others added 13 commits February 16, 2026 00:36
…stash, algolia tools; isolated-vm robustness improvements, tables backend (simstudioai#3271)

* feat(tools): advanced fields for youtube, vercel; added cloudflare and dataverse tools (simstudioai#3257)

* refactor(vercel): mark optional fields as advanced mode

Move optional/power-user fields behind the advanced toggle:
- List Deployments: project filter, target, state
- Create Deployment: project ID override, redeploy from, target
- List Projects: search
- Create/Update Project: framework, build/output/install commands
- Env Vars: variable type
- Webhooks: project IDs filter
- Checks: path, details URL
- Team Members: role filter
- All operations: team ID scope

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* style(youtube): mark optional params as advanced mode

Hide pagination, sort order, and filter fields behind the advanced
toggle for a cleaner default UX across all YouTube operations.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* added advanced fields for vercel and youtube, added cloudflare and dataverse block

* addded desc for dataverse

* add more tools

* ack comment

* more

* ops

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>

* feat(tables): added tables (simstudioai#2867)

* updates

* required

* trashy table viewer

* updates

* updates

* filtering ui

* updates

* updates

* updates

* one input mode

* format

* fix lints

* improved errors

* updates

* updates

* chages

* doc strings

* breaking down file

* update comments with ai

* updates

* comments

* changes

* revert

* updates

* dedupe

* updates

* updates

* updates

* refactoring

* renames & refactors

* refactoring

* updates

* undo

* update db

* wand

* updates

* fix comments

* fixes

* simplify comments

* u[dates

* renames

* better comments

* validation

* updates

* updates

* updates

* fix sorting

* fix appearnce

* updating prompt to make it user sort

* rm

* updates

* rename

* comments

* clean comments

* simplicifcaiton

* updates

* updates

* refactor

* reduced type confusion

* undo

* rename

* undo changes

* undo

* simplify

* updates

* updates

* revert

* updates

* db updates

* type fix

* fix

* fix error handling

* updates

* docs

* docs

* updates

* rename

* dedupe

* revert

* uncook

* updates

* fix

* fix

* fix

* fix

* prepare merge

* readd migrations

* add back missed code

* migrate enrichment logic to general abstraction

* address bugbot concerns

* adhere to size limits for tables

* remove conflicting migration

* add back migrations

* fix tables auth

* fix permissive auth

* fix lint

* reran migrations

* migrate to use tanstack query for all server state

* update table-selector

* update names

* added tables to permission groups, updated subblock types

---------

Co-authored-by: Vikhyath Mondreti <vikhyath@simstudio.ai>
Co-authored-by: waleed <walif6@gmail.com>

* fix(snapshot): changed insert to upsert when concurrent identical child workflows are running (simstudioai#3259)

* fix(snapshot): changed insert to upsert when concurrent identical child workflows are running

* fixed ci tests failing

* fix(workflows): disallow duplicate workflow names at the same folder level (simstudioai#3260)

* feat(tools): added redis, upstash, algolia, and revenuecat (simstudioai#3261)

* feat(tools): added redis, upstash, algolia, and revenuecat

* ack comment

* feat(models): add gemini-3.1-pro-preview and update gemini-3-pro thinking levels (simstudioai#3263)

* fix(audit-log): lazily resolve actor name/email when missing (simstudioai#3262)

* fix(blocks): move type coercions from tools.config.tool to tools.config.params (simstudioai#3264)

* fix(blocks): move type coercions from tools.config.tool to tools.config.params

Number() coercions in tools.config.tool ran at serialization time before
variable resolution, destroying dynamic references like <block.result.count>
by converting them to NaN/null. Moved all coercions to tools.config.params
which runs at execution time after variables are resolved.

Fixed in 15 blocks: exa, arxiv, sentry, incidentio, wikipedia, ahrefs,
posthog, elasticsearch, dropbox, hunter, lemlist, spotify, youtube, grafana,
parallel. Also added mode: 'advanced' to optional exa fields.

Closes simstudioai#3258

* fix(blocks): address PR review — move remaining param mutations from tool() to params()

- Moved field mappings from tool() to params() in grafana, posthog,
  lemlist, spotify, dropbox (same dynamic reference bug)
- Fixed parallel.ts excerpts/full_content boolean logic
- Fixed parallel.ts search_queries empty case (must set undefined)
- Fixed elasticsearch.ts timeout not included when already ends with 's'
- Restored dropbox.ts tool() switch for proper default fallback

* fix(blocks): restore field renames to tool() for serialization-time validation

Field renames (e.g. personalApiKey→apiKey) must be in tool() because
validateRequiredFieldsBeforeExecution calls selectToolId()→tool() then
checks renamed field names on params. Only type coercions (Number(),
boolean) stay in params() to avoid destroying dynamic variable references.

* improvement(resolver): resovled empty sentinel to not pass through unexecuted valid refs to text inputs (simstudioai#3266)

* fix(blocks): add required constraint for serviceDeskId in JSM block (simstudioai#3268)

* fix(blocks): add required constraint for serviceDeskId in JSM block

* fix(blocks): rename custom field values to request field values in JSM create request

* fix(trigger): add isolated-vm support to trigger.dev container builds (simstudioai#3269)

Scheduled workflow executions running in trigger.dev containers were
failing to spawn isolated-vm workers because the native module wasn't
available in the container. This caused loop condition evaluation to
silently fail and exit after one iteration.

- Add isolated-vm to build.external and additionalPackages in trigger config
- Include isolated-vm-worker.cjs via additionalFiles for child process spawning
- Add fallback path resolution for worker file in trigger.dev environment

* fix(tables): hide tables from sidebar and block registry (simstudioai#3270)

* fix(tables): hide tables from sidebar and block registry

* fix(trigger): add isolated-vm support to trigger.dev container builds (simstudioai#3269)

Scheduled workflow executions running in trigger.dev containers were
failing to spawn isolated-vm workers because the native module wasn't
available in the container. This caused loop condition evaluation to
silently fail and exit after one iteration.

- Add isolated-vm to build.external and additionalPackages in trigger config
- Include isolated-vm-worker.cjs via additionalFiles for child process spawning
- Add fallback path resolution for worker file in trigger.dev environment

* lint

* fix(trigger): update node version to align with main app (simstudioai#3272)

* fix(build): fix corrupted sticky disk cache on blacksmith (simstudioai#3273)

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Lakee Sivaraya <71339072+lakeesiv@users.noreply.github.com>
Co-authored-by: Vikhyath Mondreti <vikhyath@simstudio.ai>
Co-authored-by: Vikhyath Mondreti <vikhyathvikku@gmail.com>
… fixes, removed retired models, hex integration
Add 6 Short.io tool implementations (create link, list domains, list
links, delete link, get QR code, get analytics) with shared types and
barrel export. Register all tools in the tools registry.
Add Short.io block config with 6 operations (create link, list domains,
list links, delete link, get QR code, get analytics). Add ShortIoIcon
and register the block in the blocks registry.
Add documentation page covering all 6 Short.io tools with input/output
parameter tables and usage instructions.
@vercel
Copy link

vercel bot commented Feb 27, 2026

@abram0v1ch is attempting to deploy a commit to the Sim Team on Vercel.

A member of the Team first needs to authorize it.

@greptile-apps
Copy link
Contributor

greptile-apps bot commented Feb 27, 2026

Greptile Summary

This PR adds a complete Short.io integration with 6 tools (create link, list domains, list links, delete link, get QR code, get analytics), comprehensive block configuration, and documentation.

Key Changes:

  • Implemented 6 Short.io tools with consistent error handling and proper parameter validation
  • Added block configuration with dynamic operation selection and conditional field visibility
  • Created secure API route for QR code generation with authentication and base64 file encoding
  • All tools correctly use user-only visibility for API keys (previous feedback addressed)
  • Proper TypeScript typing with shared interfaces
  • Comprehensive documentation with parameter tables for all operations
  • Registry entries added for both tools and block

Implementation Quality:

  • Follows established patterns for tool/block integration
  • Proper error handling across all tools
  • Parameter transformations (string to number) handled correctly in block config
  • QR route includes auth validation, Zod schema validation, and proper logging
  • URL encoding used where needed (delete_link, list_links)
  • Period mapping for analytics maintains clean user-facing API

Confidence Score: 5/5

  • This PR is safe to merge with no concerns
  • All previous feedback addressed, implementation follows established patterns, proper security measures in place (user-only API keys, auth checks), comprehensive error handling, and clean architecture
  • No files require special attention

Important Files Changed

Filename Overview
apps/sim/tools/short_io/create_link.ts New tool implementation for creating Short.io links with proper API key visibility and error handling
apps/sim/tools/short_io/get_analytics.ts Comprehensive analytics tool with period mapping and detailed metric extraction
apps/sim/blocks/blocks/short_io.ts Complete block configuration with 6 operations, proper conditional field visibility, and parameter transformations
apps/sim/app/api/tools/short_io/qr/route.ts Secure API route for QR generation with proper auth, validation, and base64 file encoding
apps/sim/blocks/registry.ts Added Short.io block to registry in alphabetical order
apps/sim/tools/registry.ts Registered all 6 Short.io tools with proper imports

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[Short.io Block] --> B{Operation Selected}
    B -->|create_link| C[Create Link Tool]
    B -->|list_domains| D[List Domains Tool]
    B -->|list_links| E[List Links Tool]
    B -->|delete_link| F[Delete Link Tool]
    B -->|get_qr_code| G[Get QR Code Tool]
    B -->|get_analytics| H[Get Analytics Tool]
    
    C --> I[Short.io API POST /links]
    D --> J[Short.io API GET /domains]
    E --> K[Short.io API GET /links]
    F --> L[Short.io API DELETE /links/:id]
    G --> M[Internal API Route /api/tools/short_io/qr]
    H --> N[Short.io Stats API GET /statistics/link/:id]
    
    M --> O[Short.io API POST /links/qr/:id]
    O --> P[Base64 QR Image File]
    
    I --> Q[Returns shortURL & idString]
    J --> R[Returns domains array]
    K --> S[Returns links array & nextPageToken]
    L --> T[Returns deleted status]
    N --> U[Returns analytics data]
Loading

Last reviewed commit: e9cca4b

Copy link
Contributor

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

14 files reviewed, 6 comments

Edit Code Review Agent Settings | Greptile

- Change apiKey visibility from 'hidden' to 'user-only' in all 6 tools
- Simplify block tool selector to string interpolation
- Move QR code generation to server-side API route, return as file
  object (name, mimeType, data, size) matching standard file pattern
- Update block outputs and docs to reflect file type for QR code
@waleedlatif1
Copy link
Collaborator

@greptile

@waleedlatif1
Copy link
Collaborator

@cursor review

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants